// 解析token的中间件
// 1: 获取token
// 2：解析token
// 3：存入state中
// 4：错误token处理
const jwt = require("jsonwebtoken");


module.exports = ({ app }) => {
      return async function verify(ctx, next) {
            // 获取token
            let token = ctx.request.header.authorization;
            if (!token) {
                  ctx.body = {
                        code: -666,
                        message: "用户没有登录",
                  };
                  return;
            }
            token = token.replace("Bearer ", "");

            try {
                  // 解析token
                  const userInfo = await jwt.verify(
                        token,
                        app.config.jwt.secret
                  );
                  ctx.state._id = userInfo._id;
                  ctx.state.email = userInfo.email;
                  // 这里需要await next，否则相当于这个请求结束了，但是没有返回，前端接口报404错误
                  await next();
            } catch (e) {
                  ctx.body = {
                        code: -666,
                        message: "登录已过期",
                  };
            }
      };
};
